%include	'Macros.inc'
cr	equ	0Dh			;������� �������
lf	equ	0Ah			;������� ������
	org	100h
Start:	jmp	Begin
;	������ ���������
Lname0	db	81 			;������������ ����� ����� �����
Lname	db	0			;����������� ����� ����� �����
Namefile times	81	db	0	;��� �����
Bufer	times	512	db	0	;����� ��� �����������
Lognum1	dw	0			;���������� ����� ����� ���������
Lognum2	dw	0			;���������� ����� ����� ���������
;-----------------------------------------------------------------------

;
;	������� ���� ���������
;	-----------------------------------------
;
Begin:
;���� ������ ����� ����� ���������
	call	Clear_screen		;������� ������
	Out_str	QuestNameFile		;������ �� ����� �����
	mov	ah,0ah			;������� ����� ������
	mov	dx,Lname0		;DX <- �����-�������� ������ �����
	int	21h			;���� ������
	call	Send_crlf		;������� ������
	xor	bx,bx			;BX <- 0
	mov	bl,[Lname]		;BX <- ����� ����� �����
	cmp	bx,0			;���� ��� ����� �� �������
	je	.Exit			; �� �����
	mov	[Namefile+bx],byte 0	;������ �������� �����
;�������� ����� ���������
	mov	ah,3dh			;��������
	mov	dx,Namefile		; �����
	mov	al,0			; ��
	int	21h			; ������
	jnc	.M1			;���� �������
	Out_str	ErrorOpenFile		;��������� �� ������ �������� �����
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M1:    mov	[Lognum1],ax		;���������� �����. ������ �����
;����������� ������� ����� ����� ���������
	xor	cx,cx			;��������� CX
	mov	cl,[Lparam]		;CL <- ����� ������
	cmp	cx,0			;����� �����������?
	jnz	.M2                     ; ���
	Out_str	MsgFileNotSpec		;��������� �� ���������� ����� �����
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit
;��������� ����� ����� ���������
.M2:   	dec	cx			;������� ������ � ����� �����(��������)
	xor	si,si
	mov	bx,1
.Next:	mov	ax,[Param+bx]           ;���������� ��� �����
	mov	[Namefile+si],ax	; � Namefile
	inc	si
	inc	bx
	loop	.Next
	mov	[Namefile+si],byte 0	;������ �������� �����
;�������� � �������� ����� ���������
	mov	ah,3ch			;�������� � ��������
	mov	dx,Namefile		; �����
	mov	cx,0			; ��
	int	21h			; ������
	jnc	.M3			;���� �������
	Out_str	ErrorOpenFile		;��������� �� ������ �������� �����
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M3:    mov	[Lognum2],ax		;���������� �����. ������ �����
;����������� �����
.M4:	mov	ah,3fh			;������� ������ �� �����
	mov	bx,[Lognum1]		;BX <- �����. ����� ��������� �����
	mov	cx,512			;CX <- ����� �������� ����
	mov	dx,Bufer		;DX <- �����-�������� ������
	int	21h			;������ �� ����� � �����
	jnc	.M5			;���� �������
	Out_str	ErrorReadFile		;����� ��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M5:	mov	bx,[Lognum2]		;BX <- �����. ����� ����� �����
	mov	cx,ax			;CX <- ����� ������������ ������
	mov	ah,40h			;������� ������ � ����
	mov	dx,Bufer		;DX <- �����-�������� ������
	int	21h			;������ �� ������ � ����
	jnc	.M6			;���� �������
	Out_str	ErrorWriteFile		;����� ��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M6:	cmp	ax,512			;����� �����?
	jz	.M4			;���� ���
	Out_str	CopyCompleted		;����� ��������� � ���������� �����������
;�����
.Exit:	mov	ax,4c00h
	int	21h			;������� � DOS
QuestNameFile	db	'Enter file name: $'
MsgFileNotSpec	db	'File name not specified $'
ErrorOpenFile	db	'Error open file $'
ErrorReadFile	db	'Error read file $'
ErrorWriteFile	db	'Error write file $'
CopyCompleted	db	'Copy completed $'
;
;	������� ������ ������
;	---------------------
;
Send_crlf:
	push	ax
	push	dx
	mov	ah,2 		;������� ������
	mov	dl,cr		;��������� ������
	int	21h		;����� �������
	mov	dl,lf
	int	21h		; -"-
	pop	dx
	pop	ax
	ret
;
;	������� ������
;	--------------
;
Clear_screen:
	push	ax
	push	bx
	push	cx
	push	dx
	xor	al,al		;�������� ��� ����
	xor	cx,cx		;������� ����� ���� � (0,0)
	mov	dh,49		;������ ������ ������ - 49
	mov	dl,79		;������ ������� � 79 �������
	mov	bh,7		;��������� ���������� ��������
	mov	ah,6		;��������
	int	10h		; ����
	xor	dl,dl		;������� ����������
	xor	dh,dh		; �������
	xor	bx,bx		;������� �������������
	xor	al,al		;���������
	mov	ah,2		; �������
	int	10h		; � �������� �����
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
;
;	��������� ��� ������� � ����������
;	----------------------------------
; �����: AL - ��� ASCII ������� (0 - ����������� ������)
;	 AH - ����-��� �������
;
Read_byte:
	mov	ah,0		;���� �������
	int	16h		; ��� ���
	ret
	absolute 80h			;��������� ���� ����� �����-�������� 80h
Lparam	resb	1			;����� ������ �������
Param	resb	1			;������ ���� ������
